package notes.designpattern.java.d2_jiekougeli;

// 接口隔离原则
// 类B和D实现了接口，类A和C使用了接口的一部分方法，对类A而言，只用到了接口中的1,2,3三个方法，
// 类C只用到了接口中的1,4,5三个方法，但实现类B和D却要实现接口中的所有方法，接口中的方法4，5对类A来说没有用
// 接口中的2，3对类C来说没有用，这就不符合接口隔离原则
public class Jiekougeli {

	public static void main(String[] args) {
		A a = new A();
		a.depend(new B());
		a.depend2(new B());
		a.depend3(new B());
		
		C c = new C();
		c.depend(new D());
		c.depend4(new D());
		c.depend5(new D());
	}
}


// 接口有5个方法
interface I {
	public void option1();
	public void option2();
	public void option3();
	public void option4();
	public void option5();
}

// class B实现了接口，所以要重写5个方法
class B implements I {
	@Override
	public void option1() {
		System.out.println(" B op1");
	}

	@Override
	public void option2() {
		System.out.println(" B op2");
	}

	@Override
	public void option3() {
		System.out.println(" B op3");		
	}

	@Override
	public void option4() {
		System.out.println(" B op4");
	}

	@Override
	public void option5() {
		System.out.println(" B op5");
	}
	
}

//class D实现了接口，所以要重写5个方法
class D implements I {
	@Override
	public void option1() {
		System.out.println(" D op1");
	}

	@Override
	public void option2() {
		System.out.println(" D op2");
	}

	@Override
	public void option3() {
		System.out.println(" D op3");		
	}

	@Override
	public void option4() {
		System.out.println(" D op4");
	}

	@Override
	public void option5() {
		System.out.println(" D op5");
	}
	
}

// class A依赖接口1，2，3三个方法
class A {
	public void depend(I i) {
		i.option1();
	}
	public void depend2(I i) {
		i.option2();
	}
	public void depend3(I i) {
		i.option3();
	}
}

//class C依赖接口1，4，5三个方法
class C {
	public void depend(I i) {
		i.option1();
	}
	public void depend4(I i) {
		i.option4();
	}
	public void depend5(I i) {
		i.option5();
	}
}